package algorithm.middle;

import java.util.Arrays;
import java.util.Comparator;

/**
 *
 给出 n 个数对。 在每一个数对中，第一个数字总是比第二个数字小。

 现在，我们定义一种跟随关系，当且仅当 b < c 时，数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。

 给定一个数对集合，找出能够形成的最长数对链的长度。你不需要用到所有的数对，你可以以任何顺序选择其中的一些数对来构造。



 示例：

 输入：[[1,2], [2,3], [3,4]]
 输出：2
 解释：最长的数对链是 [1,2] -> [3,4]
 */
public class FindLongestChain646 {

    //贪心
    public int findLongestChain(int[][] pairs) {
        Arrays.sort(pairs, (o1, o2) -> {
            if (o1[1]==o2[1]){
                return o1[0] - o2[0];
            }
            return o1[1] - o2[1];
        });
        int res = 1;
        int pre = 0;
        for (int i = 1;i<pairs.length;i++ ) {
            if (pairs[pre][1]<pairs[i][0]){
                res++;
                pre = i;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        int[][] arr =  new int[][]{{-6,9},{1,6},{8,10},{-1,4},{-6,-2},{-9,8},{-5,3},{0,3}};
        Arrays.sort(arr, (o1, o2) -> {
            if (o1[1]==o2[1]){
                return o1[0] - o2[0];
            }
            return o1[1] - o2[1];
        });
        for (int[] a:arr){
            System.out.print(a[0]+","+a[1]);
            System.out.println();
        }

    }
}
